package com.java.yz.mysql_jdbc;

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.*;
import java.util.Properties;
import java.util.Scanner;
import java.util.UUID;


/*
    我们正常写完程序之后，运行程序进行登录，当我们将密码输入成1234' or '1'='1这个样子的时候，发现登录成功
        原因：sql在编译的时候，会将我们输入的内容存在关键字or,会把or当作sql语法关键字进行执行
        如何解决呢？
            这样的问题，称之为sql注入的问题
 */
public class JdbcDemo5 {
    static Connection connection = null;
    static Statement statement = null;
    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

        //加载驱动
        try {
//            //创建一个配置文件
//            Properties properties = new Properties();
//            //加载配置文件
//            properties.load(new BufferedReader(new FileReader("src/com/java/yz/mysql_jdbc/mysqlinfo.properties")));
//            //根据key获取对于的value值
//            String url1 = properties.getProperty("url");
//            String user1 = properties.getProperty("user");
//            String password1 = properties.getProperty("password");
//
//
//            //加载驱动
//            Class.forName("com.mysql.jdbc.Driver");
//
//            //获取连接对象
//            connection = DriverManager.getConnection(url1, user1, password1);


            //以后就可以使用工具类的方式来获取
            Connection connection = MySQLTool.getPreparedStatement();


            //获取操作数据库对象
            statement = connection.createStatement();

            //获取能够防止sql注入问题的数据库操作对象

            PreparedStatement preparedStatement = connection.prepareStatement("select username,password from login where username=? and password=?");


            System.out.println("===============================欢迎来到yz婚介所===============================");
            System.out.print("欢迎登录！请输入用户名：");
            String name = scanner.nextLine();
            System.out.print("请输入密码：");
            String pass = scanner.nextLine();

            //编写sql语句，看是否有该用户
//            String sql = "select username,password from login where username='" + name + "' and password='" + pass + "'";
            //"select username,password from login where username='" + yangz + "' and password='" + 123 ' or '1 '='1 + "'";
            //123 ' or '1 '='1   两个都是true，肯定可以进去


            //设置sql的值，？代表占位符
            preparedStatement.setString(1,name);
            preparedStatement.setString(2,pass);
            //这样就整体当作一个值了


            //执行查询sql语句
            ResultSet resultSet = preparedStatement.executeQuery();
            //System.out.println(resultSet.getFetchSize());   //返回的是0，说明里面没有数据
            if (! resultSet.next()) {
                System.out.println("对不起！该用户未注册，请先注册！");
                System.out.println("是否进行注册？ Y/N");
                String s = scanner.next();
                if ("Y".equals(s)) {
                    zhuce();
                } else if ("N".equals(s)) {
                    System.out.println("欢迎下次使用");
                }
            }
            else {
                System.out.println("祝你早日步入婚姻殿堂！！！>_^");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //在这里注册
    public static void zhuce() {
        System.out.println("欢迎注册yz婚介所");
        System.out.print("请输入新用户名：");
        String next = scanner.next();
        System.out.print("请输入新密码：");
        String next1 = scanner.next();
        System.out.println("注册中，请稍等.....^_^");

        //id随机且唯一
        //java提供了一个UUID，随机生成一个id
        String id = UUID.randomUUID().toString();

        String sql = "insert into login value('" + id + "','" + next + "','" + next1 + "')";
        try {
            int i = statement.executeUpdate(sql);
            Thread.sleep(3000);
            if (i == 1) {
                System.out.println("用户注册成功！");
            } else {
                System.out.println("新用户注册失败！请一小时后来！");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
